import {message} from 'antd'
import axios,{AxiosRequestConfig} from 'axios'
const isDev = process.env.NODE_ENV === 'development'
// 设置BaseURL 全局使用
const ins  = axios.create({
    baseURL:isDev ? 'http://localhost:3001/admin' : 'http://localhost:3001/admin'
})
// 设置请求拦截
ins.interceptors.request.use((config:any)=>{
    config.headers && (config.headers.token = localStorage.getItem('token') || '')
    return config
},(error)=>{
    Promise.reject(error)
})
// 设置响应拦截
ins.interceptors.response.use((response:any)=>{
    if(response.data.code === '10019'){
        message.warning('登录失效，请重新登录')
        // 防止后期在系统首页和登录首页来回切换
        localStorage.clear()
        window.location.href = '/login'
        return 
    }
    return response
},(error)=>Promise.reject(error))
// 自定义去请求封装axios
export default function request(config:AxiosRequestConfig){
    const {url='',method='GET',data={},headers = {} } = config
    switch(method.toUpperCase()){
        case 'GET':
            return ins.get(url,{params:data})
        case 'POST':
            //表单提交 application/x-www-form-url-encoded
            if(headers['content-type'] === 'applcation/x-www-form-url-encoded'){
                // 转参数 URLSearchParams / 第三方库qs
                const p = new URLSearchParams()
                for(const key in data){
                    p.append(key,data[key])
                }
                return ins.post(url,p,{headers})
            }
            // 文件提交 multipart/form-data
            if(headers['content-type'] === 'multipart/form-data'){
                const p = new FormData()
                for(const key in data){
                    p.append(key,data[key])
                }
                return ins.post(url,p,{headers})
            }
            //默认application/json
            return ins.post(url,data)
        case 'PUT' : //修改数据---所有数据的更新
            return ins.put(url,data)
        case 'DELETE': //删除数据
            return ins.delete(url,{data})
        case 'PATCH': //更新局部资源
            return ins.patch(url,data)
        default:
            return ins(config)
    }
}